package br.com.simora.execucao;

	
import java.util.Date;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.log4j.Logger;

import br.com.simora.musica.Artista;
import br.com.simora.musica.ArtistaDAO;
import br.com.simora.musica.ArtistaNomeSinonimo;
import br.com.simora.musica.Musica;
import br.com.simora.musica.MusicaDAO;
import br.com.simora.radio.Radio;
import br.com.simora.radio.RadioDAO;

@Named("execucaoService")
public class ExecucaoService {
	@Inject private MusicaDAO musicaDAO;
	@Inject private RadioDAO radioDAO;
	@Inject private ArtistaDAO artistaDAO;
	protected Logger log = Logger.getLogger(this.getClass().getSimpleName());
	
	public void processoInserirExecucao(Execucao execucao, LogCaptura log){
		//Recupera a radio do BD
		Radio radioTemp = radioDAO.recuperaRadioPorNome(execucao.getRadio().getNome());
		execucao.setRadio(radioTemp);
		
		//Trata o artista
		Artista artista = artistaDAO.recuperaArtistaPorNome(execucao.getMusica().getArtista().getNome());
		if(artista != null){
			execucao.getMusica().setArtista(artista);
		} else {
			//Recupera um sinônimo
			ArtistaNomeSinonimo artistaS = artistaDAO.recuperaArtistaSinonimoPorNome(execucao.getMusica().getArtista().getNome());
			if(artistaS != null){
				execucao.getMusica().setArtista(artistaS.getArtista());
				artista = artistaS.getArtista();
			} else {
				artistaDAO.save(execucao.getMusica().getArtista());
				artista = artistaDAO.recuperaArtistaPorNome(execucao.getMusica().getArtista().getNome());
			}
		}
		
		//Trata a música e salva a execução
		Musica musicaTemp = musicaDAO.recuperaMusicaPorNomeEArtista(execucao.getMusica().getNome(), artista);
		if(musicaTemp != null){
			execucao.setMusica(musicaTemp);
			musicaDAO.save(execucao);
		} else {
			musicaDAO.save(execucao.getMusica());
			musicaDAO.save(execucao);
		}
		
		if(null == log.getRetornoFP()){
			log.setRetornoFP("");
		}
		log.setDataHoraFim(new Date());
		log.setStatus("S");
		log.setRadio(radioTemp.getId());
		musicaDAO.update(log);
	}
	
}